from datetime import datetime
from typing import TypedDict, Union, List, Optional


class ReviewData(TypedDict):
    """ Данные отзыва """

    evaluation: int
    name: str
    card_number: str
    is_below_four: bool
    description: str


class ProductInformationData(TypedDict):
    """ Информаци о продукте (все вместе) """

    date: datetime
    name: str
    raiting: Union[int, float]
    number_of_raitings: int
    link: str


class PointsOfSaleData(TypedDict):
    """ Точки продаж продукта """

    list_of_points_of_sale: Union[List[str], List]


class ProductData(TypedDict):
    """ Данные продукта """

    information: ProductInformationData
    reviews: Union[List, List[ReviewData]]
    points_of_sale: PointsOfSaleData
